//
//  main.cpp
//  magazzino
//
//  Created by Vito on 18/11/14.
//  Copyright (c) 2014 Vito. All rights reserved.
//

#include <iostream>
#include "database.h"
#include <sstream>
#include <string>

const char* dbName="/Users/mac/Desktop/magazzino/Database.sqlite";

Database* openDb(){
    Database *db = new Database(dbName);
    db->createItemsTable();
    return db;
}

void cleanItemsTable(Database* db){
    db->cleanItemsTable();
}

void loadData(Database *db){
    int n=-1;
    
    vector<Item> items;
    items.reserve(20);
    
    string mystr;
    
    do{
        n++;
        cout << "Enter Codice ('0' to finish): ";
        getline (cin, items[n].code);
        
        if (items[n].code.compare("0")!=0){
            cout << "Enter Descrizione: ";
            getline (cin, items[n].description);
            cout << "Enter Quantità: ";
            getline (cin,mystr);
            (stringstream)mystr >> items[n].qnt;
            cout << "Enter Prezzo: ";
            getline (cin,mystr);
            (stringstream)mystr >> items[n].price;
            items.push_back(items[n]);
            
        }
        
    }
    
    while (items[n].code.compare("0")!=0);
    db->insertItems(items);
    
}

void printItemsTable (Database* db){
    vector<Item>  result = db->loadItems();
    cout << "All Items "<< endl;
    for(vector<Item>::iterator it = result.begin(); it < result.end(); ++it){
        Item item = *it;
        cout << "(codice=" << item.code << ", descrizione=" << item.description << ", prezzo =" << item.price << "  ,quantita= " << item.qnt << ")" << endl;
    }
}

void printItem (Database* db){
    
    string code;
    cout << "Enter Codice To Search: ";
    getline (cin, code);
    
    Item  result = db->loadItem(code);
    
    if (result.code != "0")
    {
        cout << "Result: (codice=" << result.code << ", descrizione=" << result.description << ", prezzo =" << result.price << "  ,quantita= " << result.qnt << ")" << endl;
    }
}

int main(int argc, const char * argv[]) {
    
    Database *db= openDb();
    
    loadData(db); // carica una lista di esempio nella tabella Items e se l'articolo esiste già aggiorna la qnt
    printItem(db); // visualizza un singolo articolo
    printItemsTable(db); //visualizza tutti gli articoli
    cleanItemsTable(db); //cancella tutti gli articoli
    
    db->close();
    return 0;
}
